#include "msg.h"

lv_obj_t *msg;
static lv_obj_t *msg_label;
static lv_obj_t *msg_close;
static lv_obj_t *msg_close_label;

void msg_close_cb(lv_obj_t *obj, lv_event_t event) {
    lv_obj_add_flag(msg, LV_OBJ_FLAG_HIDDEN);
}

void msg_hide(lv_timer_t *timer) { lv_obj_add_flag(msg, LV_OBJ_FLAG_HIDDEN); }

void msg_show(uint32_t time) {
    lv_timer_t *timer;
    /* 通过另一个接口创建第三个timer */
    timer = lv_timer_create_basic();

    // 修改此timer的回调函数和周期时间
    lv_timer_set_cb(timer, msg_hide); // 设置回调函数
    lv_timer_set_period(timer, time); // 设置周期
    lv_timer_set_repeat_count(timer, 1);
}

void msg_init() {
    // 文本显示，右侧一个关闭按钮
    msg = lv_obj_create(lv_scr_act());
    lv_obj_set_size(msg, 400, 40);
    lv_obj_align(msg, LV_ALIGN_CENTER, 0, -100);

    // 文本
    msg_label = lv_label_create(msg);
    lv_obj_set_style_text_font(msg_label, &lv_font_montserrat_20,
                                LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_label_set_text(msg_label, "");
    lv_obj_align(msg_label, LV_ALIGN_LEFT_MID, 0, 0);
    // 关闭按钮
    msg_close = lv_btn_create(msg);
    lv_obj_set_size(msg_close, 30, 25);
    lv_obj_set_style_bg_color(msg_close, lv_color_white(), LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_align(msg_close, LV_ALIGN_RIGHT_MID, 0, 0);
    // 文本
    msg_close_label = lv_label_create(msg_close);
    lv_label_set_text(msg_close_label, "X");
    lv_obj_set_style_text_color(msg_close_label,
                                lv_color_black(),
                                LV_PART_MAIN | LV_STATE_DEFAULT);
    lv_obj_align_to(msg_close_label, msg_close, LV_ALIGN_CENTER, 0, 0);
    lv_obj_add_event_cb(msg_close, msg_close_cb, LV_EVENT_CLICKED, NULL);
    // 隐藏
    lv_obj_add_flag(msg, LV_OBJ_FLAG_HIDDEN);
}

void msg_success(char *title, uint32_t time) {
    lv_obj_clear_flag(msg, LV_OBJ_FLAG_HIDDEN);
    // 设置字体为绿色
    lv_obj_set_style_text_color(msg_label,
                                lv_palette_lighten(LV_PALETTE_GREEN, 3),
                                LV_PART_MAIN | LV_STATE_DEFAULT);
    // 设置文本
    lv_label_set_text(msg_label, title);
    // 显示
    lv_obj_clear_flag(msg, LV_OBJ_FLAG_HIDDEN);
    // 定时隐藏
    msg_show(time);
}

void msg_error(char *title, uint32_t time) {
    lv_obj_clear_flag(msg, LV_OBJ_FLAG_HIDDEN);
    // 设置字体为红色
    lv_obj_set_style_text_color(msg_label,
                                lv_palette_lighten(LV_PALETTE_RED, 3),
                                LV_PART_MAIN | LV_STATE_DEFAULT);
    // 设置文本
    lv_label_set_text(msg_label, title);
    // 显示
    lv_obj_clear_flag(msg, LV_OBJ_FLAG_HIDDEN);
    // 定时隐藏
    msg_show(time);
}

void msg_info(char *title, uint32_t time) {
    lv_obj_clear_flag(msg, LV_OBJ_FLAG_HIDDEN);
    // 设置字体
    lv_obj_set_style_text_color(msg_label,
                                lv_palette_lighten(LV_PALETTE_GREY, 5),
                                LV_PART_MAIN | LV_STATE_DEFAULT);
    // 设置文本
    lv_label_set_text(msg_label, title);
    // 显示
    lv_obj_clear_flag(msg, LV_OBJ_FLAG_HIDDEN);
    // 定时隐藏
    msg_show(time);
}

void msg_warn(char *title, uint32_t time) {
    lv_obj_clear_flag(msg, LV_OBJ_FLAG_HIDDEN);
    // 设置字体
    lv_obj_set_style_text_color(msg_label,
                                lv_palette_lighten(LV_PALETTE_YELLOW, 3),
                                LV_PART_MAIN | LV_STATE_DEFAULT);
    // 设置文本
    lv_label_set_text(msg_label, title);
    // 显示
    lv_obj_clear_flag(msg, LV_OBJ_FLAG_HIDDEN);
    // 定时隐藏
    msg_show(time);
}